package com.mmc.config;

import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * Sa-Token配置类
 *
 * @author kunfe
 * @since 2024-01-01
 */
@Configuration
public class SaTokenConfig implements WebMvcConfigurer {

    /**
     * 注册Sa-Token拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册Sa-Token拦截器，校验规则为StpUtil.checkLogin()登录校验
        registry.addInterceptor(new SaInterceptor(handle -> {
            SaRouter
                // 拦截所有路由
                .match("/**")
                // 排除登录接口
                .notMatch("/api/auth/login")
                // 排除登出接口
                .notMatch("/api/auth/logout")
                // 排除验证码接口
                            .notMatch("/api/captcha/get")
            .notMatch("/api/captcha/check")
                // 排除静态资源
                .notMatch("/file/**")
                // 排除API文档
                .notMatch("/doc.html")
                .notMatch("/webjars/**")
                .notMatch("/swagger-resources/**")
                .notMatch("/v3/api-docs/**")
                .notMatch("/favicon.ico")
                // 排除健康检查
                .notMatch("/actuator/**")
                // 执行登录校验
                .check(r -> StpUtil.checkLogin());
        })).addPathPatterns("/**");
    }
} 